package org.lyh.course.service.impl;


import org.lyh.base.service.impl.BaseServiceImpl;
import org.lyh.course.domain.CourseType;
import org.lyh.course.mapper.CourseTypeMapper;
import org.lyh.course.service.ICourseTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

@Service
public class CourseTypeServiceImpl extends BaseServiceImpl<CourseType> implements ICourseTypeService {
    @Autowired
    CourseTypeMapper courseTypeMapper;

    @Override
    //插入课程类型，并处理他的dir_path
    public void insertOne(CourseType courseType) {
        courseTypeMapper.insert(courseType);
        Long parentId =  courseType.getParent().getId();
        if (Objects.isNull(parentId)) {
            courseType.setDirPath("/"+courseType.getId());
        }else{
            courseType.setDirPath(courseTypeMapper.selectById(parentId).getDirPath()+"/"+courseType.getId());
        }
        //更新courseType
        courseTypeMapper.update(courseType);
    }

    @Override
    public List<CourseType> queryTree() {
        List<CourseType> courseTypeTree = new ArrayList<>();
        //获取所有课程类型
        List<CourseType> all = courseTypeMapper.selectAll();
        //将课程类型转为map方便根据id获取对象
        Map<Long, CourseType> map = all.stream().collect(Collectors.toMap(CourseType::getId, courseType -> courseType));
        for (CourseType courseType : all) {
            //将所有一级课程类型加入课程类型树
            if (Objects.isNull(courseType.getParentId())) {
                courseTypeTree.add(courseType);
            } else {
                //将子课程类型根据其parentId添加到父课程类型children中
                map.get(courseType.getParentId()).getChildren().add(courseType);
            }
        }
        return courseTypeTree;
    }
}
